package com.ruoyi.business.domain;

import cn.hutool.crypto.SecureUtil;
import com.mybatisflex.annotation.*;
import com.ruoyi.common.utils.StringUtils;
import lombok.*;
import javax.validation.constraints.*;
import com.ruoyi.common.core.domain.BaseEntity;
import java.time.LocalDate;

 /**
 * 数据实体  : 银行卡
 * @Author  : ljq
 * @Created : 2025/10/5
 */
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Table("t_bank_card")
public class BankCard extends BaseEntity{

     
    @Id(keyType = KeyType.Auto)
    private Long id;
    
    /// 银行卡号
    @Size(min = 0, max = 32, message = "银行卡号长度不能超过个字符")
    private String cardId;
    
    /// 用户ID
    private Long userId;
    
    /// 卡号（加密存储）
    @Size(min = 0, max = 20, message = "卡号（加密存储）长度不能超过20个字符")
    private String cardNumber;
    
    /// 卡号哈希（用于查询）
    @Size(min = 0, max = 64, message = "卡号哈希（用于查询）长度不能超过64个字符")
    private String cardNumberHash;
    
    /// 卡BIN号（前6位）
    @Size(min = 0, max = 6, message = "卡BIN号（前6位）长度不能超过6个字符")
    private String cardBin;
    
    /// 卡类型：借记卡、信用卡、预付卡
    @Size(min = 0, max = 1, message = "卡类型：借记卡、信用卡、预付卡长度不能超过1个字符")
    private String cardType;
    
    /// 卡片名称
    @Size(min = 0, max = 100, message = "卡片名称长度不能超过100个字符")
    private String cardName;
    
    /// 银行关联ID
    @NotNull(message = "银行类型不能为空")
    private Long bankId;
    
    /// 币种
    @Size(min = 0, max = 3, message = "币种长度不能超过3个字符")
    private String currency;
    
    /// 有效期
    private LocalDate expiryDate;

     /// 余额（加密存储）
    private String balance;

    /// CVV加密值
    @Size(min = 0, max = 255, message = "CVV加密值长度不能超过255个字符")
    private String cvvEncrypted;
    
    /// 卡片状态
    @Size(min = 0, max = 1, message = "卡片状态长度不能超过1个字符")
    private String status;


    ///  real-number
//     public String getCardNumberReal(){
//         if(StringUtils.isEmpty(getCardNumber())) return "";
//         String secretKey = getCardNumberHash();
//         return SecureUtil.aes(secretKey.getBytes()).decryptStr(getCardNumber());
//     }

}